<?php namespace app\system\controller;


use app\admin\controller\Common;
use houdunwang\dir\Dir;
use houdunwang\request\Request;
use houdunwang\route\Controller;
use houdunwang\validate\Validate;
use system\model\Module as ModuleModel;
class Module extends Common
{
    public function __construct ()
    {
        $this->auth();
    }
    //动作
    public function index(ModuleModel $module)
    {
        //此处书写代码..
//        1看addons下有多少模块
        $modules=Dir::tree('addons');
//        p($modules);
//        2取数据扫描那些是安装过的
        //pluck获取单一字段，获取出来的结果是一个字符串
        //lists获取单一一列字段值
//        4声明空数组
        $data=[];
        $isInstalledModule = $module->where( 'module_is_system' , 0 )->lists( 'module_name' );
        foreach ($modules as $k=>$v){
//            列表中的模块能有数据库中的数据对应给个标识1没有则0
//            $modules[ $k ][ 'isinstall' ] = in_array( $v[ 'basename' ] , $isInstalledModule );
            //判断，如果模块中没有manifest.php文件，视为不合法模块
//			$manifestFile = 'addons/' . $v[ 'basename' ] . '/manifest.php';
//			if ( is_file( $manifestFile ) ) {
//            给一个标识存入
//				$modules[ $k ][ 'manifest' ] = include $manifestFile;
//				$data[] = $modules[ $k ];
//			}
            $manifestFile = 'addons/' . $v[ 'basename' ] . '/manifest.php';
            if ( is_file( $manifestFile ) ) {
//                存入的是设计模块提交的post数据
                $config = include $manifestFile;
//                加一个是否为已安装模块的标识
                $config[ 'isinstall' ] = in_array( $v[ 'basename' ] , $isInstalledModule );
//                p($config);
//                存入data
                $moduleData[] = $config;
            }
        }


        return view('',compact('moduleData'));
    }


    public  function  design(ModuleModel $module){
        if(IS_POST){
//            获取post数据
          $post=Request::post();
//            自动验证
            Validate::make([
                ['module_title','required','请输入模块名称',Validate::MUST_VALIDATE]
            ]);
            //2.判断不能重复创建模块
            //考虑规范，采用目录全部小写
            $post['module_name'] = strtolower($post['module_name']);
            //在addons或者module检测，创建的模块已存在，则不允许重复创建【目录已经存在，代表是模块已经存在】
            if(is_dir("addons/{$post['module_name']}") || is_dir("module/{$post['module_name']}")){
                return ['valid'=>0,'message'=>'模块已存在，不能重复创建'];
            }
            //3.创建出模块的基本目录结构
            $dirs = [
                'controller','model','system','template',
            ];
            foreach ($dirs as $dir) {
                //Dir::create（）在hdphp手册中组件--目录操作
                Dir::create("addons/{$post['module_name']}/{$dir}");
            }
            //4.生成文件
            $module_name = $post['module_name'];
            $content = <<<str
<?php namespace addons\\{$module_name}\system;

use module\Hdprocessor;

/**
 * 微信处理器
 * Class Processor
 * @package addons\\{$module_name}\system
 */
class Processor extends Hdprocessor
{
	public function handler()
	{

	}
}
str;
            file_put_contents("addons/{$post['module_name']}/system/Processor.php",$content);
//            加一个合法标识文件
            file_put_contents( 'addons/' . $module_name . '/manifest.php' , "<?php\r\nreturn " . var_export( $post , true ) . ";\r\n?>" );
//            只生成目录不存储到数据库
//            $module->save($post);
            return ['valid'=>1,'message'=>'模块设计成功'];


        }

        return view();
    }
//    安装模块
     public  function  install(ModuleModel $module){
         $module_name=Request::get('module_name');
//         引设计时候提交的post数据
         $data= include 'addons/'.$module_name.'/manifest.php';

         $module->save($data);
         return $this->setRedirect('index')->success('操作成功');

     }








    //模块卸载
    public function uninstall()
    {
        //接受要删除模块module_name[英文标识  $module_name = Request::get('module_name');
        //p($module_name);//pic
        //1.把该模块对应的目录删除
        $module_name = Request::get( 'module_name' );
        //2.删除数据库对应数据
        ModuleModel::where('module_name',$module_name)->delete();
        //3.成功提示
        return $this->setRedirect('index')->success('操作成功');
    }
}
